package string;

public class StringBasics {
    public static void main(String[] args) {
        // 1. 字符串创建方式
        String s1 = "Hello"; // 字符串常量池
        String s2 = new String("Hello"); // 堆内存
        String s3 = "Hello"; // 复用常量池中的对象

        // 2. 字符串不可变性
        String s4 = "abc";
        String s5 = s4.concat("def"); // 不会修改原字符串
        System.out.println("s4: " + s4 + ", s5: " + s5);

        // 3. == 与 equals() 的区别
        System.out.println("\n== 比较:");
        System.out.println("s1 == s2: " + (s1 == s2)); // false（不同对象）
        System.out.println("s1 == s3: " + (s1 == s3)); // true（同一对象）

        System.out.println("\nequals() 比较:");
        System.out.println("s1.equals(s2): " + s1.equals(s2)); // true（内容相同）
        System.out.println("s1.equals(s3): " + s1.equals(s3)); // true（内容相同）

        // 4. 字符串常量池
        String s6 = "Hello" + "World"; // 编译期优化为"HelloWorld"
        String s7 = "HelloWorld";
        System.out.println("\ns6 == s7: " + (s6 == s7)); // true

        String s8 = "Hello";
        String s9 = s8 + "World"; // 运行期拼接，创建新对象
        System.out.println("s7 == s9: " + (s7 == s9)); // false

        // 5. 空字符串与null
        String emptyStr = "";
        String nullStr = null;
        System.out.println("\n空字符串长度: " + emptyStr.length()); // 0
        System.out.println("emptyStr.isEmpty(): " + emptyStr.isEmpty()); // true
        // System.out.println(nullStr.length()); // 抛出NullPointerException

        // 6. 常见判断
        System.out.println("\n字符串判断:");
        System.out.println("s1.startsWith(\"He\"): " + s1.startsWith("He")); // true
        System.out.println("s1.endsWith(\"llo\"): " + s1.endsWith("llo")); // true
        System.out.println("s1.contains(\"ell\"): " + s1.contains("ell")); // true
    }
}
